perm filename PUP2[AP,DBL]1 blob sn#070115 filedate 1973-11-10 generic text, type T, neo UTF8
00100	(FILECREATED "10-NOV-73 16:44:08" PUP2)
00200	
00300	
00400	(DEFINEQ
00500	
00600	(A:BEING:ORDER
00700	  [LAMBDA (B1 B2)
00800	    (LESSP (FAST:BEING:COMPLEX B1)
00900	           (FAST:BEING:COMPLEX B2])
01000	
01100	(AD
01200	  [LAMBDA (L)
01300	    (SETQ PUP2FNS (SORT (APPEND PUP2FNS L)))
01400	    (SETQ PUP2FNS (INTERSECTION PUP2FNS PUP2FNS))
01500	    (MAKEFILE (QUOTE PUP2])
01600	
01700	(ADD:BEING
01800	  [LAMBDA (B)
01900	    (PUT B IDEN B)
02000	    (SET B B)
02100	    (PUT B BEING T)
02200	    [FOR X IN (CDR SET:OF:BEING:PARTS) DO (PROGN (PRIN1 X)
02300	                                                 (PRIN1 "   ")
02400	                                                 (PUT B X (READ]
02500	    (PRIN1 "*** FINISHED ***")
02600	    (SETQ SET:OF:BEINGS (CONS B SET:OF:BEINGS))
02700	    [EVAL (LIST (QUOTE DEFINEQ)
02800	                (LIST B (LIST (QUOTE LAMBDA)
02900	                              (GETP B EXPLICIT:ARGS)
03000	                              (LIST TRY:BEING B (CONS (QUOTE LIST)
03100	                                                      (GETP B 
03200	                                                      EXPLICIT:ARGS]
03300	    (AD (LIST B])
03400	
03500	(DISK:DUMP
03600	  [LAMBDA (FILE STUFF)
03700	    (SETQ FILEVARS (MKATOM (CONCAT (MKSTRING FILE)
03800	                                   "VARS")))
03900	    (SET FILEVARS (QUOTE (EVERYTHING)))
04000	    (SETQ EVERYTHING STUFF)
04100	    (MAKEFILE FILE])
04200	
04300	(DOT:PROD
04400	  [LAMBDA (L1 L1)
04500	    (COND
04600	      [L1 (PLUS (TIMES (CAR L1)
04700	                       (CAR L2))
04800	                (DOT:PROD (CDR L1)
04900	                          (CDR L2]
05000	      (T 0])
05100	
05200	(FAST:BEING:COMPLEX
05300	  [LAMBDA (B)
05400	    (DOT:PROD (QUOTE (.1 .6 .3))
05500	              (GETP B COMPLEXITY:VECTOR])
05600	
05700	(FOREACH
05800	  [LAMBDA (X IN SET DO ACTION)
05900	    (PROG (RESULT)
06000	      START:HERE
06100	          (COND
06200	            ((NULL SET)
06300	              (RETURN RESULT)))
06400	          (SET X (CAR SET))
06500	          (SETQ SET (CDR SET))
06600	          (SETQ RESULT (EVAL ACTION))
06700	          (GO START:HERE])
06800	
06900	(PERMIT:USER:INTERRUPT
07000	  [LAMBDA NIL
07100	    (COND
07200	      (EXPERTISE (PRIN1 "INTERRUPT? "))
07300	      (T (PRIN1 
07400	"
07500	DO YOU WISH TO INTERRUPT ME NOW, TO ASK ME ABOUT WHAT I'M DOING? ")))
07600	    (SELECTQ (RATOM)
07700	             (Y (PROCESS:USER:INTERRUPT))
07800	             (N NIL)
07900	             (PROGN (PRIN1 "
08000	NO, NO.  TYPE  Y   OR    N   ......... ")
08100	                    (PERMIT:USER:INTERRUPT])
08200	
08300	(POP:DEMONS
08400	  [LAMBDA NIL
08500	    (MATCHQ (←CURRENT:DEMONS
08600	              ←←DEMON:STACK)
08700	            $DEMON:STACK])
08800	
08900	(PROCESS:USER:INTERRUPT
09000	  [LAMBDA NIL
09100	    ((QPROG (RESPONSE ←BC
09200	                      ←BC1
09300	                      ←BC2)
09400	            (COND
09500	              ((NOT EXPERTISE)
09600	                (PRINT (APPEND (QUOTE (BEING IS))
09700	                               B))
09800	                (PRIN1 " TYPE  ?  OR ")))
09900	            (PRIN1 " REQUEST: ")
10000	            (MATCHQ (←BC
10100	                      ←←BC2)
10200	                    BEING:STACK)
10300	            (MATCHQ ←BC1
10400	                    (TUPLE))
10500	            L
10600	            ((ATTEMPT [SELECTQ (SETQ RESPONSE (RATOM))
10700	                               [? (PRIN1 
10800	
10900	" YOUR OPTIONS ARE AS FOLLOWS:
11000	
11100	QUIT    END THE INTERRUPT
11200	BEING   PRINT NAME OF CURRENT BEING
11300	DEMONS  PRINT SET OF DEMONS CURRENTLY ACTIVE
11400	CONTROL:HISTORY    PRINT LIST OF BEINGS IN CONTROL, THE PATH FROM THE
11500	                   CURRENT BEING BACK TO THE BEGINNING OF THE PROGRAM
11600	OLDER   CONSIDER THE BEING WHICH CALLED THE CURRENT ONE
11700	YOUNGER CONSIDER THE BEING WHICH THE CURRENT ONE CALLED
11800	OLDEST  CONSIDER THE FIRST BEING IN CONTROL
11900	YOUNGEST    CONSIDER THE LAST BEING IN CONTROL 
12000	")
12100	                                  (MAPC SET:OF:BEING:PARTS
12200	                                        (FUNCTION (LAMBDA (Y)
12300	                                            (PRIN1 Y)
12400	                                            (PRIN1 "   PRINT OUT ")
12500	                                            (PRIN1 Y)
12600	                                            (PRIN1 
12700	                                 "  WITH RESPECT TO CURRENT BEING
12800	"]
12900	                               (QUIT (COND
13000	                                       ((NOT EXPERTISE)
13100	                                         (PRIN1 "
13200	
13300	END OF INTERRUPT
13400	
13500	")))
13600	                                     (RETURN))
13700	                               (BEING (PRINT $BC))
13800	                               (CONTROL:HISTORY (PRIN1 $BC1)
13900	                                                (PRIN1 " *** ")
14000	                                                (PRIN1 $BC)
14100	                                                (PRIN1 " *** ")
14200	                                                (PRIN1 $BC2)
14300	                                                (TERPRI))
14400	                               (DEMONS (PRIN1 $CURRENT:DEMONS)
14500	                                       (PRIN1 "
14600	THE DEMON STACK IS ")
14700	                                       (PRINT $DEMON:STACK))
14800	                               (OLDER (MATCHQ ←BC1
14900	                                              (TUPLE $$BC1 $BC))
15000	                                      (MATCHQ (←BC
15100	                                                ←←BC2)
15200	                                              $BC2)
15300	                                      (PRINT $BC))
15400	                               (YOUNGER (MATCHQ ←BC2
15500	                                                (TUPLE $BC $$BC2))
15600	                                        (MATCHQ (←←BC1
15700	                                                  ←BC)
15800	                                                $BC1)
15900	                                        (PRINT $BC))
16000	                               (OLDEST (MATCHQ (←←BC1
16100	                                                 ←BC)
16200	                                               BEING:STACK)
16300	                                       (MATCHQ ←BC2
16400	                                               (TUPLE))
16500	                                       (PRINT $BC))
16600	                               (YOUNGEST (MATCHQ (←BC
16700	                                                   ←←BC2)
16800	                                                 BEING:STACK)
16900	                                         (MATCHQ ←BC1
17000	                                                 (TUPLE))
17100	                                         (PRINT $BC))
17200	                               (COND
17300	                                 ((MEMBER RESPONSE SET:OF:BEING:PARTS)
17400	                                   (PRINT (GETP $BC RESPONSE)))
17500	                                 ((NLSETQ (PRINT (EVAL RESPONSE)))
17600	                                   T)
17700	                                 (T (FAIL]
17800	                 THEN T
17900	               ELSE (PRIN1 
18000	                  "
18100	***   ERROR *** IMPOSSIBLE. TYPE ? FOR HELP.
18200	
18300	")))
18400	            (GO L])
18500	
18600	(PULLOUT
18700	  [LAMBDA (E L)
18800	    (COND
18900	      ((ATOM L)
19000	        L)
19100	      ((EQUAL E (CAR L))
19200	        (CDR L))
19300	      (T (CONS (CAR L)
19400	               (PULLOUT E (CDR L])
19500	
19600	(PUSH:DEMONS
19700	  [LAMBDA (NEW:DEMONS)
19800	    (MATCHQ ←NEW:DEMO
19900	            (SETDIFFERENCE NEW:DEMONS $CURRENT:DEMONS))
20000	    (MATCHQ ←DEMON:STACK
20100	            (TUPLE $CURRENT:DEMONS $DEMON:STACK))
20200	    (MATCHQ ←CURRENT:DEMONS
20300	            (TUPLE $NEW:DEMO $$CURRENT:DEMONS])
20400	
20500	(SATISFY
20600	  [LAMBDA (G)
20700	    (COND
20800	      (G (TRY:BEING SATISFY (LIST G)))
20900	      (T T])
21000	
21100	(SERVE
21200	  [LAMBDA NIL
21300	    (TRY:BEING SERVE (LIST])
21400	
21500	(SETDIFFERENCE
21600	  [LAMBDA (S1 S2)
21700	    (COND
21800	      ((NULL S1)
21900	        NIL)
22000	      (T (APPEND [COND
22100	                   ((MEMBER (CAR S1)
22200	                            S2)
22300	                     NIL)
22400	                   (T (LIST (CAR S1]
22500	                 (SETDIFFERENCE (CDR S1)
22600	                                S2])
22700	
22800	(SETINTERSECTION
22900	  [LAMBDA (S1 S2)
23000	    (INTERSECTION S1 S2])
23100	
23200	(SETUNION
23300	  [LAMBDA (S1 S2)
23400	    (SETQ S1 (APPEND S1 S2))
23500	    (INTERSECTION S1 S1])
23600	
23700	(START
23800	  [LAMBDA (EXPERTISE)
23900	    (PROG NIL
24000	          (SETQ Y (QUOTE Y))
24100	          (SETQ N (QUOTE N))
24200	          (SETQ BEING:STACK NIL)
24300	          (MATCHQ ←DEMON:STACK
24400	                  (TUPLE))
24500	          (MATCHQ ←CURRENT:DEMONS
24600	                  (TUPLE))
24700	          (COND
24800	            (EXPERTISE (PRIN1 "USER INTERRUPT LEVEL... "))
24900	            (T (PRIN1 
25000	
25100	"HELLO THERE.  I AM READY TO START .
25200	
25300	HOW OFTEN SHOULD I LET YOU INTERRRUPT ME, TO ASK ME ABOUT WHAT I'M
25400	DOING?  TYPE A DIGIT, AS EXPLAINED BELOW:
25500	
25600	0  NEVER (ULTIMATE PRODUCTION-RUN MODE)
25700	2  A COUPLE OF TIMES DURING THE COURSE OF WRITING A PROGRAM
25800	4  DURING EACH PHASE OF WRITING A PROGRAM
25900	6  DURING THE WRITING OF EACH NONTRIVIAL SUBFUNCTION OF A PROGRAM
26000	8  DURING EACH PHASE OF WRITING EACH SUBFUNCTION OF A PROGRAM
26100	10 EACH TIME A BEING TRANSFERS CONTROL (ULTIMATE DEBUG MODE)
26200	
26300	OK, NOW TYPE A DIGIT... ")))
26400	      L   [MATCHQ ←PERMANENT:USER:INTERRUPT:DEMONS
26500	                  (SELECTQ (RATOM)
26600	                           (0 (CLASS))
26700	                           (2 (CLASS USER:INTERRUPT:AT:DEBUG 
26800	                                     USER:INTERRUPT:AT:END))
26900	                           (4 (CLASS USER:INTERRUPT:AT:PHASES))
27000	                           (6 (CLASS USER:INTERRUPT:AT:PHASES 
27100	                                     USER:INTERRUPT:AT:CODING))
27200	                           (8 (CLASS USER:INTERRUPT:AT:PHASES 
27300	                                     USER:INTERRUPT:AT:CODING 
27400	                                     USER:INTERRUPT:AT:ADAPTING))
27500	                           (10 (CLASS PERMIT:USER:INTERRUPT))
27600	                           (AND (PRIN1 
27700	
27800	"
27900	***  ERROR  ***     YOU MUST TYPE ONE EVEN INTEGER FROM 0 TO 10
28000	                      TRY   AGAIN:
28100	")
28200	                                (GO L]
28300	          (MATCHQ ←USER:INTERRUPT:DEMONS
28400	                  $PERMANENT:USER:INTERRUPT:DEMONS)
28500	          (SETQ USER:INTERRUPT:COPY:OF:PHASES PROGRAM:WRITING:PHASES)
28600	          (SERVE])
28700	
28800	(SUBSTITUTE
28900	  [LAMBDA (NEW FOR OLD IN LIST:STRUCTURE)
29000	    (SET LIST:STRUCTURE (SUBST NEW OLD (EVAL LIST:STRUCTURE])
29100	
29200	(TRY:BEING
29300	  [LAMBDA (B ARGS)
29400	    (EVAL (GETP TRY:BEING EXPLICIT:ARGS:CHECK))
29500	    (EVAL (GETP TRY:BEING META:CODE])
29600	
29700	(TRY:TO:SATISFY
29800	  [LAMBDA (SUBGOAL)
29900	    (ATTEMPT (SATISFY SUBGOAL)
30000	        THEN T
30100	      ELSE (SETQ FINAL:CO:REQ (CONS SUBGOAL FINAL:CO:REQ])
30200	
30300	(USER:INTERRUPT:AT:ADAPTING
30400	  [LAMBDA (S:EXP)
30500	    (COND
30600	      ((EQUAL B ADAPT:PRECONCEIVED:FUNCTION)
30700	        (PERMIT:USER:INTERRUPT)
30800	        (MATCHQ (CLASS USER:INTERRUPT:AT:ADAPTING 
30900	                       ←←USER:INTERRUPT:DEMONS)
31000	                $USER:INTERRUPT:DEMONS])
31100	
31200	(USER:INTERRUPT:AT:CODING
31300	  [LAMBDA (S:EXP)
31400	    (COND
31500	      ((EQUAL B ENCODE)
31600	        (PERMIT:USER:INTERRUPT)
31700	        (MATCHQ (CLASS USER:INTERRUPT:AT:CODING ←←USER:INTERRUPT:DEMONS)
31800	                $USER:INTERRUPT:DEMONS])
31900	
32000	(USER:INTERRUPT:AT:DEBUG
32100	  [LAMBDA (S:EXP)
32200	    (COND
32300	      ((EQUAL B CLARIFY:IMPROBABLE:SITUATION)
32400	        (PERMIT:USER:INTERRUPT)
32500	        (MATCHQ (CLASS USER:INTERRUPT:AT:DEBUG ←←USER:INTERRUPT:DEMONS)
32600	                $USER:INTERRUPT:DEMONS])
32700	
32800	(USER:INTERRUPT:AT:END
32900	  [LAMBDA (S:EXP)
33000	    (COND
33100	      ((EQUAL B OPTIMIZE)
33200	        (PERMIT:USER:INTERRUPT)
33300	        (MATCHQ (CLASS USER:INTERRUPT:AT:END ←←USER:INTERRUPT:DEMONS)
33400	                $USER:INTERRUPT:DEMONS])
33500	
33600	(USER:INTERRUPT:AT:PHASES
33700	  [LAMBDA (S:EXP)
33800	    (COND
33900	      ((MEMBER B USER:INTERRUPT:COPY:OF:PHASES)
34000	        (PERMIT:USER:INTERRUPT)
34100	        (SETQ USER:INTERRUPT:COPY:OF:PHASES (PULLOUT B 
34200	                                      USER:INTERRUPT:COPY:OF:PHASES])
34300	)
34400	  (LISPXPRINT (QUOTE PUP2FNS)
34500	              T)
34600	  (RPAQQ PUP2FNS
34700	         (A:BEING:ORDER AD ADD:BEING DISK:DUMP DOT:PROD 
34800	                        FAST:BEING:COMPLEX FOREACH 
34900	                        PERMIT:USER:INTERRUPT POP:DEMONS 
35000	                        PROCESS:USER:INTERRUPT PULLOUT PUSH:DEMONS 
35100	                        SATISFY SERVE SETDIFFERENCE SETINTERSECTION 
35200	                        SETUNION START SUBSTITUTE TRY:BEING 
35300	                        TRY:TO:SATISFY USER:INTERRUPT:AT:ADAPTING 
35400	                        USER:INTERRUPT:AT:CODING 
35500	                        USER:INTERRUPT:AT:DEBUG USER:INTERRUPT:AT:END 
35600	                        USER:INTERRUPT:AT:PHASES))
35700	  (LISPXPRINT (QUOTE PUP2VARS)
35800	              T)
35900	  [RPAQQ PUP2VARS (SET:OF:BEINGS
36000	           BEING TRY:TO:SATISFY SET:OF:BEING:PARTS 
36100	           PROGRAM:WRITING:PHASES EVAL (VARS * (APPEND SET:OF:BEINGS 
36200	                                                 SET:OF:BEING:PARTS))
36300	           (COMS * (LIST (APPEND (QUOTE (PROP ALL))
36400	                                 SET:OF:BEINGS]
36500	  (RPAQQ SET:OF:BEINGS (SERVE SATISFY TRY:BEING))
36600	  (RPAQQ BEING BEING)
36700	  (RPAQQ TRY:TO:SATISFY TRY:TO:SATISFY)
36800	  (RPAQQ SET:OF:BEING:PARTS
36900	         (IDEN IMPLICIT:ARGS EXPLICIT:ARGS WHAT HOW WHY WHEN META:CODE 
37000	               COMMENTS PRE:REQUISITES CO:REQUISITES POST:REQUISITES 
37100	               EXPLICIT:ARGS:CHECK DEMONS MAIN:EFFECTS MINOR:EFFECTS 
37200	               AFFECTS COMPLEXITY:VECTOR GENERALIZATIONS 
37300	               SPECIALIZATIONS ALTERNATIVES))
37400	  (RPAQQ PROGRAM:WRITING:PHASES (OBTAIN:USABLE:INFORMATION 
37500	                                                    USE:INFORMATION 
37600	                                          FILL:IN:UNDEFINED:SECTION 
37700	                                         ADAPT:PRECONCIVED:FUNCTION 
37800	                                       CLARIFY:IMPROBABLE:SITUATION 
37900	                                                FIX:INCORRECT:PIECE 
38000	                                                           OPTIMIZE))
38100	  (RPAQQ EVAL EVAL)
38200	  (RPAQQ SERVE SERVE)
38300	  (RPAQQ SATISFY SATISFY)
38400	  (RPAQQ TRY:BEING TRY:BEING)
38500	  (RPAQQ IDEN IDEN)
38600	  (RPAQQ IMPLICIT:ARGS IMPLICIT:ARGS)
38700	  (RPAQQ EXPLICIT:ARGS EXPLICIT:ARGS)
38800	  (RPAQQ WHAT WHAT)
38900	  (RPAQQ HOW HOW)
39000	  (RPAQQ WHY WHY)
39100	  (RPAQQ WHEN WHEN)
39200	  (RPAQQ META:CODE META:CODE)
39300	  (RPAQQ COMMENTS COMMENTS)
39400	  (RPAQQ PRE:REQUISITES PRE:REQUISITES)
39500	  (RPAQQ CO:REQUISITES CO:REQUISITES)
39600	  (RPAQQ POST:REQUISITES POST:REQUISITES)
39700	  (RPAQQ EXPLICIT:ARGS:CHECK EXPLICIT:ARGS:CHECK)
39800	  (RPAQQ DEMONS DEMONS)
39900	  (RPAQQ MAIN:EFFECTS MAIN:EFFECTS)
40000	  (RPAQQ MINOR:EFFECTS MINOR:EFFECTS)
40100	  (RPAQQ AFFECTS AFFECTS)
40200	  (RPAQQ COMPLEXITY:VECTOR COMPLEXITY:VECTOR)
40300	  (RPAQQ GENERALIZATIONS GENERALIZATIONS)
40400	  (RPAQQ SPECIALIZATIONS SPECIALIZATIONS)
40500	  (RPAQQ ALTERNATIVES ALTERNATIVES)
40600	  (PUTPROPS SERVE IDEN SERVE
40700	                  IMPLICIT:ARGS NIL
40800	                  EXPLICIT:ARGS NIL
40900	                  WHAT (TUPLE DO ANYTHING THE USER ASKS)
41000	                  HOW (TUPLE GET A TASK FROM THE USER)
41100	                  WHY (TUPLE FUNDAMENTAL DRIVE TO SERVE THE USER)
41200	                  WHEN NIL
41300	                  META:CODE (COND ($DONE (PRINT "WE ARE DONE"))
41400	                                  (T (PRINT "NOPE, NO DONE")))
41500	                  COMMENTS ((PRINT "ARE WE DONE (T OR NIL)??  ")
41600	                            (MATCHQ ←DONE (READ)))
41700	                  PRE:REQUISITES NIL
41800	                  CO:REQUISITES NIL
41900	                  POST:REQUISITES NIL
42000	                  EXPLICIT:ARGS:CHECK NIL
42100	                  DEMONS NIL
42200	                  MAIN:EFFECTS (((ATTEMPTING ←TASK)
42300	                                 (SERVE)))
42400	                  MINOR:EFFECTS NIL
42500	                  AFFECTS NIL
42600	                  COMPLEXITY:VECTOR (.2 .4 .6 .8)
42700	                  GENERALIZATIONS NIL
42800	                  SPECIALIZATIONS (WRITE:PROGRAM COUNSEL)
42900	                  ALTERNATIVES (IGNORE REBEL)
43000	                  BEING T)
43100	  (PUTPROPS SATISFY IDEN SATISFY
43200	                    IMPLICIT:ARGS NIL
43300	                    EXPLICIT:ARGS (G)
43400	                    WHAT (TUPLE SATISFY THE SIMPLE SUBGOAL
43500	                                (EVAL G))
43600	                    HOW (TUPLE PASS CONTROL TO THE SIMPLEST SUFFICIENT 
43700	                               BEING)
43800	                    WHY (TUPLE (EVAL G)
43900	                               IS A REQUISITE TO BE SATISFIED FOR THE 
44000	                               CALLER)
44100	                    WHEN NIL
44200	                    META:CODE [IF
44300	                                (ATTEMPT (IS (@ G))
44400	                                         THEN T)
44500	                                THEN T ELSE
44600	                                (PROG
44700	                                  (B:LIST)
44800	                                  (MATCHQ ←G (@ G))
44900	                                  (FOR
45000	                                    B1 IN (PULLOUT SATISFY 
45100	                                                   SET:OF:BEINGS)
45200	                                    DO
45300	                                    (FOR X IN (GETP B1 MAIN:EFFECTS)
45400	                                         UNTIL
45500	                                         (ATTEMPT
45600	                                           (MATCH (CAR X)
45700	                                                  $G)
45800	                                           THEN
45900	                                           (SETQ B:LIST
46000	                                                 (APPEND (CDR X)
46100	                                                         B:LIST)))
46200	                                         DO NIL))
46300	                                  (FOR X IN (SORT B:LIST A:BEING:ORDER)
46400	                                       UNTIL
46500	                                       (ATTEMPT (IS $G)
46600	                                                THEN T)
46700	                                       DO
46800	                                       (EVAL X]
46900	                    COMMENTS NIL
47000	                    PRE:REQUISITES NIL
47100	                    CO:REQUISITES NIL
47200	                    POST:REQUISITES NIL
47300	                    EXPLICIT:ARGS:CHECK T
47400	                    DEMONS NIL
47500	                    MAIN:EFFECTS (((SATISFIED ←G)
47600	                                   (SATISFY $G)))
47700	                    MINOR:EFFECTS NIL
47800	                    AFFECTS [APPEND
47900	                              [MAPCAR
48000	                                (PROG
48100	                                  (B:LIST)
48200	                                  (MATCHQ ←G (@ G))
48300	                                  (FOR
48400	                                    B1 IN (PULLOUT SATISFY 
48500	                                                   SET:OF:BEINGS)
48600	                                    DO
48700	                                    (FOR X IN (GETP B1 MAIN:EFFECTS)
48800	                                         UNTIL
48900	                                         (ATTEMPT
49000	                                           (MATCH (CAR X)
49100	                                                  $G)
49200	                                           THEN
49300	                                           (SETQ B:LIST
49400	                                                 (APPEND (CDR X)
49500	                                                         B:LIST)))
49600	                                         DO NIL)))
49700	                                (LAMBDA
49800	                                  (Y)
49900	                                  (COND (Y (CONS Y (QUOTE (
50000	POSSIBLE:CALLED]
50100	                              (QUOTE ((TRY:BEING CALLED)
50200	                                      (SORT CALLED)
50300	                                      (A:BEING:ORDER CALLED]
50400	                    COMPLEXITY:VECTOR (0.0 .3 .2 .4)
50500	                    GENERALIZATIONS (SERVE)
50600	                    SPECIALIZATIONS (TRY:BEING)
50700	                    ALTERNATIVES (WRITE:PROGRAM 
50800	                                        ADAPT:PRECONCEIVED:FUNCTION)
50900	                    BEING T)
51000	  (PUTPROPS TRY:BEING IDEN TRY:BEING
51100	                      IMPLICIT:ARGS NIL
51200	                      EXPLICIT:ARGS (B ARGS)
51300	                      EXPLICIT:ARGS:CHECK (AND
51400	                                            (EQUAL T (GETP B BEING))
51500	                                            (EQUAL (LENGTH
51600	                                                     (GETP B 
51700	                                                      EXPLICIT:ARGS))
51800	                                                   (LENGTH ARGS)))
51900	                      WHAT (TUPLE CARRY OUT BEING (EVAL B)
52000	                                  WITH ARGUMENTS (EVAL ARGS))
52100	                      META:CODE (PROG (FINAL:CO:REQ)
52200	                                      (/SETQ BEING:STACK (CONS B 
52300	                                                        BEING:STACK))
52400	                                      (EVAL (GETP B EXPLICIT:ARGS:CHECK)
52500	                                            )
52600	                                      (MAPC (GETP B PRE:REQUISITES)
52700	                                            SATISFY)
52800	                                      (PUSH:DEMONS (GETP B DEMONS))
52900	                                      (MAPC (GETP B CO:REQUISITES)
53000	                                            TRY:TO:SATISFY)
53100	                                      (MAPC (GETP B COMMENTS)
53200	                                            EVAL)
53300	                                      (ASSERT (APPLYING DEMONS)
53400	                                              APPLY 
53500	                                             $USER:INTERRUPT:DEMONS)
53600	                                      (EVAL (GETP B META:CODE))
53700	                                      (MAPC FINAL:CO:REQ SATISFY)
53800	                                      (POP:DEMONS)
53900	                                      (MAPC (GETP B POST:REQUISITES)
54000	                                            SATISFY)
54100	                                      (/SETQ BEING:STACK (CDR 
54200	                                                        BEING:STACK)))
54300	                      BEING T)
54400	STOP